1. Field of the Invention
This invention generally relates to data processing systems including one or more hosts and one or more data storage systems, such as a disk array, or direct access, storage device, with multiple physical disk drives and more specifically to a method and apparatus for enabling multiple hosts to issue optimized overlapping input-output, or I/O, requests to a particular logical device in the data storage system.
2. Description of Related Art
As the capabilities of data processing systems have increased, applications for use in those data processing systems have become more sophisticated. Now a data processing system may contain multiple hosts operating with independent host applications that access data in a large capacity data storage system either directly or over a network. Today, data storage systems are generally divided into logical devices or into blocks called by other names, such as logical volumes, data sets, files, etc. It is highly desirable that a data storage system in which a single logical device, that may store multiple files, be enabled to handle multiple concurrent requests for access to different files even from one or more different hosts and host applications.
A conventional data processing system includes a main frame computer or host including multiple central processors that interact with a data storage system. The data storage system generally includes a “disk array storage device,” or “direct access storage device” (e.g., a “DASD”) in which multiple physical disk drives are organized in multiple logical devices. The host communicates with the DASD through I/O requests provided by the operating system associated with the host. The host operating system heretofore has generally limited accesses to a given logical device to a single access at a time. For example, in the known MVS operating system, one unit control block (UCB) is assigned to each logical device. When a first I/O request identifies a file or dataset in a logical device, a UCB assigned to that logical device is set to a busy state until the entire I/O request is completed. Any following requests for the same logical device generated during the interval of the first request were queued to await the availability of that one UCB even though the I/O request was to a different file or dataset. Consequently, this feature forced all the I/O requests to a single logical device to be handled in seriatim.
There are some applications in which such an I/O request serialization may not adversely effect all operations. For example, in data storage systems that incorporate cache memory with the physical disk drives write operations merely transfer data to the cache memory. Read operations that identify data within the cache memory are handled in a minimal time so there is a minimal delay until a next read or write operation can be started. If it could be assured that all such requests could be handled in the cache memory, serialization would impose a minimal penalty. However, in most applications data will be required that is not in the cache memory, so access to a physical disk drive for the data will be necessary. The resulting interval for transferring data from the physical disk drive to the cache memory is significantly longer than the time to transfer data between the host and the cache memory. Consequently, other write and read requests, that might otherwise access data already in the cache, are delayed until the read miss operation has been completed. In these situations serialization adversely affects host processing significantly.
In accordance with one new approach an operating system that normally uses one unit control block, or UCB, defines that UCB as a “base UCB”. A number of unassigned UCB's are allocated to the same logical device. These are known as alias UCB's. In accordance with this approach a host can issue concurrent or overlapped I/O requests by assigning each different request to one of the base or alias UCB's up to the total number of UCB's allocated to the logical device. However, this approach is imbedded in an upgrade to an existing operating system. It has not been possible to retrofit existing operating systems with this feature. As a result in many installations there is a strong reluctance to adopt this desirable feature because significant personnel and equipment resources must be allocated to the installation of such an upgrade. What is needed is an ability to provide existing operating systems with a parallel access feature.
In the MVS operating system an I/O request takes the form of a number of channel command words (or CCW's). An access method in MVS responds to an I/O request by generating, as its first CCW, a Define Extent CCW that defines the total range of locations that will be locked during any given I/O request. Some prior software tends to assign a default value in the Define Extent CCW that includes the entire logical device as the extent. Following channel command words in the I/O request specify read or write operations which identify the starting and ending locations of one or more blocks of data or whole tracks to be actually transferred. Typically this “required extent” is significantly smaller than the size of the defined extent established by the Define Extent CCW. When this occurs, it becomes very difficult to realize the full benefit of the parallel access activity. Locking large portions of or the entirety of a logical device effectively serializes operations in the DASD as successive I/O requests are generated by the operating system.
Multiple reads to the same logical device can be readily accommodated particularly when the data being read lies in the cache memory. Such situations generally occur when multiple host systems have access to the same data. When a write operation occurs, it is necessary to block any subsequent read operations to avoid any overlaps that could generate corrupt data. In accordance with the prior art, the entire extent established by the Define Extent command is blocked for a write operation. Consequently, the introduction of a write operation can materially effect the throughput of subsequent read operations. What is needed is a way to optimize the extents to minimize any delays that are produced and to enable a greater flexibility in handling multiple I/O requests, especially when writing data.